package com.heiye.blog.ai.model.gptsovits;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @author: heiye
 * @date: 2025/11/20 下午4:09
 * @version: v1.0.0
 * @description: GPT-SoVITS 配置类
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GPTSoVITSOptions {
    /**
     * 应用密钥
     */
    private String appKey;

    /**
     * 模型名称
     */
    private String model;

    /**
     * 角色模型名称
     */
    private String roleName;

    /**
     * 提示文本语言
     */
    private String promptLang;

    /**
     * 情感参数
     */
    @Builder.Default
    private String emotion = "默认";

    /**
     * 待合成的文本内容
     */
    private String text;

    /**
     * 文本语言
     */
    private String textLang;

    /**
     * 采样时选择的top k个最可能的token
     * 范围：[1, 100]
     */
    @Builder.Default
    private Integer topK = 15;

    /**
     * 采样时累积概率阈值
     * 范围：[0, 1]
     */
    @Builder.Default
    private Integer topP = 1;

    /**
     * 采样温度参数，控制生成随机性
     * 范围：[0, 1]
     */
    @Builder.Default
    private Integer temperature = 1;

    /**
     * 文本分割方法
     */
    @Builder.Default
    private String textSplitMethod = "凑四句一切";

    /**
     * 批处理大小
     */
    @Builder.Default
    private Integer batchSize = 1;

    /**
     * 批处理阈值
     */
    @Builder.Default
    private Double batchThreshold = 0.75;

    /**
     * 是否分割桶
     */
    @Builder.Default
    private Boolean splitBucket = true;

    /**
     * 语速因子
     */
    @Builder.Default
    private Integer speed = 1;

    /**
     * 片段间隔时间
     */
    @Builder.Default
    private Double fragmentInterval = 0.3;

    /**
     * 媒体文件类型
     */
    @Builder.Default
    private String mediaType = "wav";

    /**
     * 是否并行推理
     */
    @Builder.Default
    private Boolean parallelInfer = true;

    /**
     * 重复惩罚系数
     * 范围：[0, 2]
     */
    @Builder.Default
    private Double repetitionPenalty = 1.35;

    /**
     * 随机种子
     * -1 即代表随机种子
     */
    @Builder.Default
    private Integer seed = -1;

    /**
     * 采样步数
     */
    @Builder.Default
    private Integer sampleSteps = 16;

    /**
     * 是否进行语音识别
     */
    @Builder.Default
    private Boolean ifSr = false;

    
}
